#pragma once

#include <stdexcept>


namespace evm { namespace messaging {

using namespace std;

struct MessagingError : std::exception {
    explicit MessagingError(string msg) : msg(std::move(msg)) {}
    const char* what() const noexcept override { return msg.c_str(); }

private:
    string msg;
};

struct TimeoutError : MessagingError {
    explicit TimeoutError(string msg) : MessagingError(std::move(msg)) {}
};

struct MethodNotFoundError : MessagingError {
    explicit MethodNotFoundError(string msg) : MessagingError(std::move(msg)) {}
};

struct CallError : MessagingError {
    explicit CallError(string msg) : MessagingError(std::move(msg)) {}
};

}}
